/* const express = require('express')
const app = express()
app.listen(3000)

app.get('/users',(req,res)=>{

  
})
 */

const md5 = require('md5')

// 连接mongodb数据库
const mongoose = require('mongoose')
// mongodb://主机名:端口号/库名 mongodb://localhost/test
const db = mongoose.connect('mongodb://localhost:27017/test', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

// 定义Schema  集合的字段
const userSchema = new mongoose.Schema({
  // 账号
  // username: String,
  username: {
    type: String,
    minlength: 2,
    required: true,
    // 自定义验证规则
    validate: {
      validator: function (value) {
        return value != 'admin'
      },
      message: '用户名不能为admin'
    }
  },
  password: {
    type: String,
    // 修改器
    set: function (v) {
      return md5(v)
    }
  },
  age: {
    type: Number,
    // 获取器
    get: v => {
      if (v >= 10) {
        return '保密'
      }
      return v;
    }
  },
  /* sex: {
    type: String,
    enum: ['男神', '女神'],
    default: '男神'
  } */
}, {
  timestamps:
    { createdAt: 'created_at', updatedAt: 'updated_at' }
});

// 有3个参数，但是一般新项目中，只写两个，老项目转移中，可能会写3个参数
// 参数1：模型名称，如果没有写参数3，此名称还有一个作用，把此名称改为复数形式，当作集合名，首字母大写
// 参数2：schema表结构
// 参数3：定义集合名称，如果没有写以参数1，复数形式创建集合
const model = mongoose.model('User', userSchema);


// mongoose它所有模型操作，都可以返回promise,也可以用回调


// 添加 , 返回是一个数组对象
/* model.insertMany({
  username: 'admins',
  password: 'admin888',
  age: 10
}, (err, doc) => {
  console.log(err, doc);
}) */

// 添加 返回是一个对象
/* model.create({
  username: 'user',
  password: 'admin888',
  age: 10
}, (err, doc) => {
  if (!err) {
    console.log(doc);
  } else {
    console.log(err);
  }
}) */

// 查询
/* const _id = '60ab507f03458c3b10f838be';
; (async function () {
  let data = await model.findOne({ _id });
  console.log(data.age);
})() */

// 查询多条
/* ; (async function () {
  let data = await model.find({}).skip(0).limit(1);
  console.log(data);
})();
; (async function () {
  let data = await model.count();
  console.log(data);
})()
 */

/* // 修改
; (async function () {
  const _id = '60ab507f03458c3b10f838be';
  let data = await model.updateMany({ _id }, { $set: { username: 'lisi' } })
  console.log(data);
})()
 */

